#include<bits/stdc++.h>
using namespace std;
#define ALL(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define debug(v) cout<<#v<<":";for(auto x:v){cout<<x<<' ';}cout<<endl;
#define INF 1000000000
#define mod 1000000007
using ll=long long;
const ll LINF=1001002003004005006ll;
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
// ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
template<class T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}
template<class T>bool chmin(T &a,const T &b){if(b<a){a=b;return true;}return false;}

int n;
vector<vector<pair<ll,int>>> g;
ll ans=0;

ll dfs(int pre,int now){
    vector<ll> v;
    for(auto to:g[now])if(pre!=to.second){
        v.push_back(to.first+dfs(now,to.second));
    }
    sort(ALL(v));reverse(ALL(v));
    if(v.size()==1) chmax(ans,v[0]);
    else if(v.size()>=2) chmax(ans,v[0]+v[1]);
    else return 0;
    return v[0];
}

signed main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    
    cin>>n;
    g.resize(n);
    rep(i,n-1){
        int u,v;ll w;cin>>u>>v>>w;
        g[u].push_back(make_pair(w,v));
        g[v].push_back(make_pair(w,u));
    }    
    dfs(-1,0);
    cout<<ans<<endl;
    return 0;
}

