#include<bits/stdc++.h>
using namespace std;
const int md=1e9+7;
int n,dep,p[200005],cc[200005];
long long pw[200005];
vector<int>g[200005];
deque<long long>dp[3][200005];
void dfs(int v,int d)
{
	cc[d]++;dep=max(dep,d);
	int pos=0;
	for(int i=0;i<g[v].size();i++)
	{
		int u=g[v][i];
		dfs(u,d+1);
		//swap
		if(dp[0][v].size()<dp[0][u].size())for(int j=0;j<3;j++)swap(dp[j][v],dp[j][u]);
		int sz=dp[0][u].size();
		pos=max(pos,sz);
		for(int i=0;i<sz;i++)
		{
			long long t[3]={};
			long long r=dp[0][v][i]+dp[1][v][i]+dp[2][v][i];
			r%=md;
			long long s=dp[0][u][i]+dp[1][u][i]+dp[2][u][i];
			s%=md;
			t[0]=dp[0][v][i]*dp[0][u][i]%md;
			t[1]=(dp[1][v][i]*dp[0][u][i]%md+dp[0][v][i]*dp[1][u][i]%md)%md;
			t[2]=(r*s-t[0]-t[1])%md;
			t[2]=(t[2]+md)%md;
			for(int j=0;j<3;j++)dp[j][v][i]=t[j];
		}
		//clear
		for(int j=0;j<3;j++)dp[j][u].clear();
	}
	dp[0][v].push_front(1);
	dp[1][v].push_front(1);
	dp[2][v].push_front(0);
	for(int i=0;i<=pos;i++)
	{
		dp[0][v][i]=(dp[0][v][i]+dp[2][v][i])%md;
		dp[2][v][i]=0;
	}
}
int main()
{
	pw[0]=1;
	for(int i=1;i<=200000;i++)pw[i]=pw[i-1]*2%md;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){scanf("%d",&p[i]);g[p[i]].push_back(i);}
	dfs(0,0);
	long long ans=0;
	for(int i=0;i<=dep;i++)
	{
		long long t=dp[1][0][i];
		ans=(ans+t*pw[n+1-cc[i]])%md;
	}
	printf("%lld\n",ans);
	return 0;
}