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)
}