#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1E6+1;
int n,cnt,h[N],w[N],r1,r2;
bool vis[N];
ll ans,f[N][2];
struct Edge{
int to,ne;
}e[N];
inline void add(int x,int y){
e[++cnt].ne=h[x];
e[cnt].to=y;
h[x]=cnt;
}
void findCir(int x,int rt){
vis[x]=1;
for(int i=h[x];i;i=e[i].ne){
int v=e[i].to;
if(v==rt){
r1=x;
r2=v;
return;
}
if(vis[v]) continue;
findCir(v,rt);
}
}
void dfs(int x,int rt){
f[x][0]=0;
f[x][1]=w[x];
for(int i=h[x];i;i=e[i].ne){
int v=e[i].to;
if(v==rt) continue;
dfs(v,rt);
f[x][0]+=max(f[v][1],f[v][0]);
f[x][1]+=f[v][0];
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>w[i]>>x;
add(x,i);
}
for(int i=1;i<=n;i++){
if(vis[i]) continue;
r1=r2=0;
findCir(i,i);
if(r1){
memset(f, 0, sizeof(f));
dfs(r2,r2);
ans+=max(f[r2][0],f[r2][1]);
}
}
cout<<ans;
return 0;
}