import java.util.Scanner;
import java.util.ArrayList;


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    static int res = Integer.MIN_VALUE;
    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] value = new int[n];
        int[] parent = new int[n];

        for (int i = 0; i < n; i++) value[i] = in.nextInt();
        for (int i = 0; i < n; i++) parent[i] = in.nextInt();

        if(n==1){
            System.out.println(value[0]);
            return;
        } 

        ArrayList<Integer>[] relations = new ArrayList[n]; //relations[i]表示节点i的子节点
        for (int i = 1; i < n; i++) {
            if(relations[parent[i]-1]==null) relations[parent[i]-1] = new ArrayList();
            relations[parent[i]-1].add(i);
        }

        maxPasserano(value,relations,0);
        System.out.println(res);

    }


    private static int maxPasserano(int[] value,ArrayList<Integer>[] relations, int curNodeId){
        int left = 0;int right = 0;
        int max = Integer.MIN_VALUE;
        //System.out.println(curNodeId);
        if(relations[curNodeId]==null||relations[curNodeId].size()==0) return value[curNodeId];
        if(relations[curNodeId].size()>=1)
        left = maxPasserano(value,relations,relations[curNodeId].get(0));
        if(relations[curNodeId].size()==2)
        right= maxPasserano(value,relations,relations[curNodeId].get(1));
        res = Math.max(res, Math.max(left,right) + value[curNodeId]);
        res = Math.max(res, left+right + value[curNodeId]);
        res = Math.max(res,value[curNodeId]);
        return Math.max(left,right) + value[curNodeId];
    }
}