#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#define IOS std::ios::sync_with_stdio(false)
#define inf 0x3f3f3f3f
#define YES cout << "YES" << endl
#define NO cout << "NO" << endl
#define int long long
#define x first
#define y second
#define cmp [&](PII a, PII b){ return a.y < b.y; }
const int N = 5e5+10, mod = 1e9+7, M = 5e7+5, K = 2e5+10, Z = 1e5+7, X = 1.5 * 1e9;
using namespace std;
typedef long long LL;
typedef priority_queue<int> PQI;
typedef priority_queue <int, vector<int>, greater<>> PQGI;
typedef pair<int, int> PII;
int e[K], idx, ne[K], h[K], w[K];
bool st[K];
void add(int a, int b, int c)
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}
int dfs(int u)
{
int res = 0;
st[u] = true;
for(int i = h[u]; ~i; i = ne[i])
{
int j = e[i];
if(st[j]) continue;
res = max(res, dfs(j) + w[i]);
}
return res;
}
// int dfs(int u, int fa)
// {
// int res = 0;
// for(int i = h[u]; i != -1; i = ne[i])
// {
// int j = e[i];
// if(j == fa) continue;
// res = max(res, dfs(j, u) + w[i]);
// }
// return res;
// }
void solve()
{
memset(h, -1, sizeof h);
int n, sum = 0; cin >> n;
for(int i = 1; i < n; i ++)
{
int a, b, c; cin >> a >> b >> c;
add(a, b, c), add(b, a, c);
sum = sum + 2 * c;
}
cout << sum - dfs(1) << endl;
// cout << sum - dfs(1, -1) << endl;
}
signed main()
{
IOS; int T = 1;
cin.tie(nullptr);
cout.tie(nullptr);
// cin >> T;
while( T -- ) solve();
return 0;
}