原理:乘法分配律
#include<bits/stdc++.h>
using namespace std;
using ll= long long;
typedef pair<int,int>PII;
const int M=1e9+7;
const int N=1e5+20;
int n,m;
int tong[4];
ll jc[N];
ll qmi(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1) res=res*a%M;
a=a*a%M;
b>>=1;
}
return res;
}
ll C(ll a,ll b)
{
return jc[a]*qmi(jc[b],M-2)%M*qmi(jc[a-b],M-2)%M;
}
int main()
{
//
int n; cin>>n;
for(int i=1;i<=n;i++)
{
int x; cin>>x;
tong[x]++;
}
jc[0]=1;
for(int i=1;i<=n;i++)
{
jc[i]=jc[i-1]*i%M;
}
ll l=0;
for(int i=0;i<=tong[2];i++)
{
l=(l+C(tong[2],i)*(i+1)%M)%M;
}
ll r=0;
for(int i=0;i<=tong[3];i++)
{
r=(r+C(tong[3],i)%M*(i+1)%M)%M;
}
ll ans=r*l%M*qmi(2,tong[1])%M;
cout<<(ans+M-1)%M;
}