#include<bits/stdc++.h>
using namespace std;
const int M = 105;
int n;
unsigned long long ans ;
struct tree {
int to, ext;
}edge[M*2];
int head[M],w[M], tot;
void add(int u, int v) {
edge[++tot].to = v;
edge[tot].ext = head[u];
head[u] = tot;
}
int siz[M], f[M], root;
void find(int rt, int fa) {
siz[rt] = 1;
for(int i = head[rt]; i!=-1; i = edge[i].ext) {
int to = edge[i].to;
if(to==fa) continue;
find(to, rt);
siz[rt] += siz[to];
f[rt] = max(f[rt], siz[to]);
}
f[rt] = max(f[rt], n - siz[rt]);
if(f[rt] < f[root] || root == 0) {
root = rt;
}
}
int dep[M], vis[M], cnt;
void dfs1(int rt, int fa) {
for(int i = head[rt]; i!=-1; i = edge[i].ext) {
int to = edge[i].to;
if(to == fa) continue;
dep[to] = dep[rt] + 1;
dfs1(to, rt);
}
}
void dfs2(int rt, int fa) {
ans += w[rt] * (dep[rt]);
for(int i = head[rt]; i!=-1; i = edge[i].ext) {
int to = edge[i].to;
if(to == fa) continue;
dfs2(to, rt);
}
}
int main() {
memset(head,-1,sizeof(head));
int u, v,k;
cin>>n;
for(int i = 1; i <= n; i ++) {
cin>>w[i]>>u>>v;
if(u) add(i, u), add(u, i);
if(v) add(i, v), add(v, i);
}
find(1, 0);
dfs1(root, 0);
dfs2(root, 0);
cout<<ans;
return 0;
}