#include <bits/stdc++.h>
using namespace std;
const int INF = (int)2e9;
const long long INFL = (long long)9e18;
const int MAXINT = ((~0) ^ (1 << 31));
const long long MAXLL = ((~0) ^ ((long long)1 << 63));
template <class T>
inline T pow2(T a) {
  return a * a;
}
template <class T>
inline bool mineq(T& a, T b) {
  return (a > b) ? (a = b, true) : false;
}
template <class T>
inline bool maxeq(T& a, T b) {
  return (a < b) ? (a = b, true) : false;
}
const int maxn = (int)1111;
;
const int MOD = (int)1e9 + 7;
;
long long fact[maxn], rfact[maxn];
long long powmod(long long a, long long b) {
  if (!b) return 1;
  long long t = powmod(a, b / 2);
  t = (t * t) % MOD;
  if (b & 1) t = (t * a) % MOD;
  return t;
}
long long cmb(long long n, long long k) {
  if (k > n) return 0;
  return ((fact[n] * rfact[n - k]) % MOD * rfact[k]) % MOD;
}
long long k, cnt[maxn], n = 0;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  fact[0] = 1;
  for (int i = 1; i < (int)(maxn); i++) fact[i] = (fact[i - 1] * i) % MOD;
  for (int i = 0; i < (int)(maxn); i++) rfact[i] = powmod(fact[i], MOD - 2);
  cin >> k;
  for (int i = 0; i < (int)(k); i++) {
    cin >> cnt[i];
    n += cnt[i];
  }
  long long ans = 1;
  for (int i = k - 1; i >= (int)(0); i--) {
    ans = (ans * cmb(n - 1, cnt[i] - 1)) % MOD;
    n -= cnt[i];
  }
  cout << ans;
}
