#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
int n,x,y,ans;
bool vis[200001];
vector<pair<int,int> >G[200001];
void dfs(int u,int sum,int dep){
if(dep>3){
ans=max(sum,ans);
return;
}
int fst=0,sec=0,thd=0;
for(int i=0;i<G[u].size();i++){
if(!vis[G[u][i].se]){
vis[G[u][i].se]=1;
dfs(G[u][i].se,sum+G[u][i].fi,dep+1);
vis[G[u][i].se]=0;
}
if(G[u][i].se>fst) thd=sec,sec=fst,fst=G[u][i].se;
else if(G[u][i].se>sec) thd=sec,sec=G[u][i].se;
else if(G[u][i].se>thd) thd=G[u][i].se;
}
ans=max(ans,fst+sec+thd);
}
signed main(){
cin>>n;
for(int i=1;i<=n-1;i++){
cin>>x>>y;
G[x].push_back({y,i+1});
G[i+1].push_back({y,x});
}
for(int i=1;i<=n;i++){
memset(vis,0,sizeof vis);
vis[i]=1;
dfs(i,0,1);
}
cout<<ans;
}