#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define fi first
#define se second
#define pb push_back
#define ii pair<int , int>
#define pq priority_queue
#define iii pair<int , pair<int , int>>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define fod(i,r,l) for(int i=r;i>=l;i--)
#define fill(f,x) memset(f,x,sizeof(f))
#define NAME "file"

const int N = 2e5 + 5, mod = 1e9 + 7;
int n;
vector <int> g[N];
int w[N] , dp[N][2] , s[N] , node[N] , p[N] , cnt = 0;

void dfs1(int u , int pa)
{
    s[u] = w[u];
    node[u] = 1;

	for (auto v : g[u]) 
	if (v != pa) 
	{
		dfs1(v , u);
        
        s[u] += s[v];
        node[u] += node[v];
    }
}

bool cmp(int a , int b)
{
    return s[a] * node[b] < s[b] * node[a];
}

void dfs2(int u , int pa)
{
    vector <int> g2; // chua cac con 
    p[u] = ++cnt;

	for (auto v : g[u]) 
	if (v != pa) 
	{
		g2.push_back(v);
    }

    sort(g2.begin() , g2.end() , cmp);

    for (auto v : g2)
    {
        dfs2(v , u);
    }
}


signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);  cout.tie(0);
    //freopen(NAME".INP" , "r" , stdin);
    //freopen(NAME".OUT" , "w" , stdout);

    cin >> n;
    fo(i, 1, n)
        cin >> w[i];

    fo(i, 2, n)
    {
        int p;
        cin >> p;
        g[p].push_back(i);
    }

    dfs1(1 , 0);
    dfs2(1 , 0);

    int ans = 0;
    fo(i, 1, n)
        ans += p[i] * w[i];
    cout << ans;
}
// haronnee_