#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=2e5+10;
int fa[MAXN],p[MAXN];
ll ans;
int n,x;
struct node{
		int x,s,id;
		bool operator <(const node &a)const{
		if (x*a.s!=s*a.x) return (ll)x*a.s<(ll)s*a.x;
		return id<a.id;
	}
	   bool operator ==(const node &a)const{
	   	return (a.x==x&&a.s==s&&a.id==id);
	   }
}a[MAXN];
set<node>q;
int getfather(int x)
{
	if (fa[x]==x) return x;
	fa[x]=getfather(fa[x]);
	return fa[x];
}
int main(){
	scanf("%d",&n);
	for (int i=2;i<=n;i++) 
	{
		scanf("%d",&p[i]); 
	}
	for (int i=1;i<=n;i++) fa[i]=i;
	for (int i=1;i<=n;i++) {
		scanf("%d",&x);
		a[i]=(node){x,1,i};
		q.insert(a[i]);
	}
	while (!q.empty())
	{
		node t=*q.begin(); q.erase(t);
		if (p[t.id]==0) continue;
		int f=getfather(p[t.id]);
        ans+=(ll)(t.s-t.x)*a[f].x;
        q.erase(a[f]);
        fa[t.id]=f;
        a[f].x+=t.x; a[f].s+=t.s; q.insert(a[f]);
	}
	cout << ans << endl;
}