#include<bits/stdc++.h>
using namespace std;
#define inf 200005
#define N 100005
#define int long long
int n,m,cnt,k;
int a[inf],b[inf];
struct node{
int y,w;
}nd,n1,n2;
vector<node>v[inf],v1;
bool cmp(node a,node b){
if(a.w>b.w)return 1;
return 0;
}
void solve(){
cin>>n;
int x,y;
int ans=0;
for(int i=2;i<=n;i++){
cin>>x>>y;
nd.y=x;nd.w=y;
v[i].push_back(nd);
nd.y=i;
v[x].push_back(nd);
}
for(int i=1;i<=n;i++)sort(v[i].begin(),v[i].end(),cmp);
for(int i=1;i<=n;i++){
if(v[i].size()<3)continue;
v1=v[i];
ans=max(ans,v1[0].w+v1[1].w+v1[2].w);
}
for(int i=1;i<=n;i++){
if(v[i].size()<=1)continue;
for(int j=0;j<v[i].size();j++){
v1=v[i];
nd=v1[j];
if(v[nd.y].size()<=1)continue;
if(j==0)n1=v1[1];
else n1=v1[0];
v1=v[nd.y];
if(v1[0].y==i)n2=v1[1];
else n2=v1[0];
ans=max(ans,nd.w+n1.w+n2.w);
}
}
cout<<ans<<endl;
}
signed main(){
int T=1;
while(T--){
solve();
}
}