#include <bits/stdc++.h>
using namespace std;
long long int countFact(long long int n, long long int p) {
  long long int k = 0;
  while (n >= p) {
    k += n / p;
    n /= p;
  }
  return k;
}
long long pow(long long int a, long long int b, long long int MOD) {
  long long x = 1, y = a;
  while (b > 0) {
    if (b % 2 == 1) {
      x = (x * y);
      if (x > MOD) x %= MOD;
    }
    y = (y * y);
    if (y > MOD) y %= MOD;
    b /= 2;
  }
  return x;
}
long long InverseEuler(long long int n, long long int MOD) {
  return pow(n, MOD - 2, MOD);
}
long long factMOD(long long int n, long long int MOD) {
  long long res = 1;
  while (n > 0) {
    for (long long int i = 2, m = n % MOD; i <= m; i++) res = (res * i) % MOD;
    if ((n /= MOD) % 2 > 0) res = MOD - res;
  }
  return res;
}
long long C(long long int n, long long int r, long long int MOD) {
  if (countFact(n, MOD) > countFact(r, MOD) + countFact(n - r, MOD)) return 0;
  return (factMOD(n, MOD) * ((InverseEuler(factMOD(r, MOD), MOD) *
                              InverseEuler(factMOD(n - r, MOD), MOD)) %
                             MOD)) %
         MOD;
}
int main() {
  long long int n;
  cin >> n;
  long long int a[n], i, j, sum = 0;
  for (i = 0; i < n; i++) {
    cin >> a[i];
    sum += a[i];
  }
  sum -= 1;
  long long int ans = 1;
  for (i = n - 1; i >= 0; i--) {
    ans = ans * C(sum, a[i] - 1, 1000000007) % 1000000007;
    sum -= a[i];
  }
  cout << ans << endl;
  return 0;
}
