#include <bits/stdc++.h>
using namespace std;
struct edge {
int to, w;
};
int n, s, ans;
edge e[100005];
int f[100005];
int dfs(int x, int w) {
if (f[x]) return f[x];
if (x == s && w != 0) return f[x] = w;
if (e[x].to == 0) return f[x] = 0;
return f[x] = dfs(e[x].to, w + e[x].w);
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int d, t;
cin >> d >> t;
e[i] = {d, t};
}
for (int i = 1; i <= n; i++) {
s = i;
ans = max(ans, dfs(i, 0));
}
cout << ans;
return 0;
}