#include <iostream>
#include <vector>
const int MAXN = 2e5 + 10;
struct Edge
{
int to, cost;
Edge(){};
Edge(int to, int cost)
{
this->to = to;
this->cost = cost;
}
};
int n;
std::vector < Edge > adj[MAXN];
int dp[MAXN][2];
int up[MAXN];
void read()
{
std::cin >> n;
for(int i = 1; i < n; i++)
{
int u, v, cost;
std::cin >> u >> v >> cost;
adj[u].push_back(Edge(v, cost));
adj[v].push_back(Edge(u, cost));
}
}
void dfs(int u, int par)
{
for(Edge &e : adj[u])
{
int v = e.to;
int cost = e.cost;
if(v == par)
continue;
dfs(v, u);
up[v] = cost;
}
}
void dfs2(int u, int par)
{
dp[u][0] = dp[u][1] = 0;
for(Edge &e : adj[u])
{
int v = e.to;
int cost = e.cost;
if(v == par)
continue;
dfs2(v, u);
dp[u][0] += std::max(dp[v][0], dp[v][1]);
}
for(Edge &e : adj[u])
{
int v = e.to;
int cost = e.cost;
if(v == par)
continue;
dp[u][1] = std::max(dp[u][1], dp[u][0] - std::max(dp[v][0], dp[v][1]) + dp[v][0] + cost + up[u]);
}
}
void solve()
{
int ans = 0;
for(int i = 1; i <= n; i++)
{
dfs(i, i);
dfs2(i, i);
ans = std::max(ans, dp[i][0]);
}
std::cout << ans << '\n';
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
read();
solve();
return 0;
}