package main

import (
	"bufio"
	"fmt"
	"os"
)

var in = bufio.NewReader(os.Stdin)
var out = bufio.NewWriter(os.Stdout)

func ReadInt(a *int) error{
    sign, ans, read := 1, 0, false
    c, err := in.ReadByte()
    for ; err == nil && (c < '0' || c > '9'); c, err = in.ReadByte() {
        if c == '-' {
            sign = -1
        }
    }

    for ; err == nil && c >= '0' && c <= '9'; c, err = in.ReadByte() {
        ans = ans << 3 + ans <<1 + int(c-'0')
        read = true
    }
    
    if read {
        *a = ans *sign
    }
    return err

}

func max(a, b int) int {
    if a < b {
        return b
    }
    return a
}
func main() {
    defer out.Flush()
    var n int
    ReadInt(&n)
    cost, edge, dp := make([]int, n+1), make([][]int, n+1), make([][2]int, n+1)
    for i := 1;  i<=n; i++ {
        ReadInt(&cost[i])
    }
    for i := 0;  i<n; i++ {
        var a int
        ReadInt(&a)
        edge[a] = append(edge[a], i+1)
    }

    var dfs func(int, int) 
    dfs = func(root, fa int) {
        dp[root][0] += cost[root]
        for _, item := range edge[root] {
            if item == fa {
                continue
            }
            dfs(item, root)
            dp[root][0] += dp[item][1]
            dp[root][1] += max(dp[item][0], dp[item][1])

        }
    }
    dfs(0, -1)
    ans := max(dp[0][1], dp[0][0])
    fmt.Fprintln(out, ans)
}