#include<bits/stdc++.h>
using namespace std;
const int N = 5010;
#define int long long
int n,dis[N],dis2[N],dis3[N],dep[N],ans[N],vis[N],maxn,fr[N];
vector<pair<int,int> > G[N];
void dfs(int x,int fa){
dep[x]=dep[fa]+1;
for(int i=0;i<G[x].size();i++){
int v=G[x][i].first,w=G[x][i].second;
if(v==fa) continue;
fr[v]=w;
dfs(v,x);
}
}
void dfs2(int x,int fa,int p){
vis[x]=1;
for(int i=0;i<G[x].size();i++){
int v=G[x][i].first,w=G[x][i].second;
if(v==fa||dep[v]<dep[p]) continue;
dis[v]=dis[x]+w;
dfs2(v,x,p);
}
}
void dfs3(int x,int fa){
for(int i=0;i<G[x].size();i++){
int v=G[x][i].first,w=G[x][i].second;
if(v==fa||vis[v]) continue;
dis[v]=dis[x]+w;
dfs3(v,x);
}
}
signed main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n-1;i++){
int x,y,w;
cin>>x>>y>>w;
G[x].push_back(make_pair(y,w));
G[y].push_back(make_pair(x,w));
}
dfs(1,0);
for(int i=2;i<=n;i++){
for(int j=1;j<=n;j++) vis[j]=0,dis[j]=0,dis2[j]=0,dis3[j]=0;
dfs2(i,0,i);
int bz=0,t=0;
for(int j=1;j<=n;j++){
if(dis[j]>dis2[i]){
dis2[i]=dis[j];
bz=j;
}
}
if(bz!=0){
for(int j=1;j<=n;j++) dis[j]=0;
dis2[i]=0;
dfs2(bz,0,i);
for(int j=1;j<=n;j++){
if(dis[j]>dis2[i]){
dis2[i]=dis[j];
t=j;
}
dis3[j]=dis[j];
}
for(int j=1;j<=n;j++) dis[j]=0;
dfs2(t,0,i);
ans[i]=1e18;
for(int j=1;j<=n;j++){
dis3[j]=max(dis3[j],dis[j]);
if(dis3[j]!=0) ans[i]=min(ans[i],dis3[j]);
}
}
for(int j=1;j<=n;j++) dis[j]=0,dis2[j]=0,dis3[j]=0;
dfs3(1,0);
bz=0,t=0,maxn=0;
for(int j=1;j<=n;j++){
if(dis[j]>maxn){
maxn=dis[j];
bz=j;
}
}
for(int j=1;j<=n;j++) dis[j]=0;
maxn=0;
dfs3(bz,0);
for(int j=1;j<=n;j++){
if(dis[j]>maxn){
maxn=dis[j];
t=j;
}
dis3[j]=dis[j];
}
for(int j=1;j<=n;j++) dis[j]=0;
dfs3(t,0);
int cnt=1e18;
for(int j=1;j<=n;j++){
dis3[j]=max(dis3[j],dis[j]);
if(dis3[j]!=0) cnt=min(cnt,dis3[j]);
}
ans[i]=max(ans[i]+cnt+fr[i],max(cnt,ans[i]));
}
int final_ans=1e18;
for(int i=2;i<=n;i++) final_ans=min(final_ans,ans[i]);
cout<<final_ans<<endl;
return 0;
}