// 医院设置
//各点权值,路径乘积之和最小
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;
typedef long long ll;
int const N = 1200;
int wal[N];
ll fa[N];
ll ans=9999999999;
vector<int>mp[N];
int n;
void dijistra(int s) {
queue<int>q1;
queue<int>q2;
int vis[N];
vis[s] = 1;
int dis = 1;
q1.push(s);
while (!q1.empty()) {
int temp = q1.front();
q1.pop();
for (auto it : mp[temp]) {
if (vis[it]!=1) {
q2.push(it);
vis[it] = 1;
fa[s] =fa[s] + (dis * wal[it]);
}
}
dis++;
while (!q2.empty()) {
int temp2 = q2.front();
q2.pop();
for (auto it : mp[temp2]) {
if (vis[it]!=1) {
vis[it] = 1;
q1.push(it);
fa[s] += (dis * wal[it]);
}
}
}
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
int l, r;
cin >> wal[i] >> l >> r;
if (l != 0) {
mp[i].push_back(l);
mp[l].push_back(i);
}
if (r != 0) {
mp[i].push_back(r);
mp[r].push_back(i);
}
}
for (int i = 1; i <= n; i++) {
dijistra(i);
ans = min(ans, fa[i]);
}
cout << ans;
return 0;
}