#include<bits/stdc++.h>
#include<bits/extc++.h>
#define Mx 1000005
#define ll long long
using namespace std;
void read(ll &x){
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9')x=x*10+s-'0',s=getchar();
x*=f;
}
unordered_map<int,int>f[Mx];
struct node{
ll x,y,z;
}edge[Mx];
ll n,x,y,z,ans,l[Mx];
vector<ll>a[Mx];
inline ll dfs(ll fm,ll end){
if(f[fm][end]!=0)return f[fm][end]-1;
if(f[end][fm]!=0)return n-f[end][fm]-1;
ll h=0;
if(a[end].size()==1)return 0;
for(int i=0;i<a[end].size();i++){
if(a[end][i]!=fm){
f[end][a[end][i]]=dfs(end,a[end][i])+1;
h+=f[end][a[end][i]];
}
}
return h;
}
int main(){
read(n);
for(int i=1;i<n;i++){
ll x1,y1,z1;
read(x1),read(y1),read(z1);
a[x1].push_back(y1);
a[y1].push_back(x1);
edge[i].x=x1;
edge[i].y=y1;
edge[i].z=z1;
}
for(int i=1;i<n;i++){
ll fs,es;
if(f[edge[i].x][edge[i].y]!=0)fs=f[edge[i].x][edge[i].y];
else if(f[edge[i].y][edge[i].x]!=0)fs=f[edge[i].y][edge[i].x];
else f[edge[i].x][edge[i].y]=dfs(edge[i].x,edge[i].y)+1,fs=f[edge[i].x][edge[i].y];
es=n-fs;
ll sss=abs(fs-es)*edge[i].z;
ans+=sss;
}
printf("%lld",ans);
return 0;
}