#include <bits/stdc++.h>
using namespace std;
vector<pair<int,vector<int>>>d(1010);
int n,k,ma=0xc0c0c0c0;
int dfs(int k)
{
    int res1=0,res2=0;
    if(!d[k].second.empty())res1=max(dfs(d[k].second[0]),0);
    if(d[k].second.size()==2)res2=max(dfs(d[k].second[1]),0);
    ma=max(ma,res1+res2+d[k].first);
    return max(res1,res2)+d[k].first;
}
int main() {
    d[0].first=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>d[i].first;
    for(int i=1;i<=n;i++)
    {
        cin>>k;
        d[k].second.push_back(i);
    }
    dfs(d[0].second[0]);
    cout<<ma<<endl;
    return 0;
}