#include<stdio.h>
#define maxn 1000000007
int a[1600];
__int64 c[1050][1060]; //存C(n,m)的表
__int64 ans;
int main(){
int n,m,i,j,total;
for(i = 1;i <= 1000;i++)
c[i][0] = 1;
for(i = 1;i <= 1000;i++){
for(j = 1;j <= i;j++){
if(i == j)
c[i][j] = 1;
else if(i > j)
c[i][j] = (c[i-1][j] + c[i-1][j-1]) % maxn;
}
}
//上面的代码是打表 C(n,m) 的运算结果
while(scanf("%d",&n)!=EOF){
for(i = 1;i <= n;i++){
scanf("%d",&a[i]);
}
total = a[1];
ans = 1;
for(i = 2;i <= n;i++){ // 因为 1号球总是最先取完,所以我们从2号球开始排列组合
total += a[i];
ans = (ans * c[total - 1][a[i] - 1]) % maxn; //把各个球的排列组合乘起来
}
printf("%I64d\n",ans);
}
return 0;
}