#include using namespace std; #include using mint = atcoder::modint1000000007; #define rep(i, l, r) for (int i = (int)(l); i<(int)(r); i++) #define ll long long struct Combination { vector fac, infac; Combination(int n) { fac.resize(n+1); infac.resize(n+1); fac[0] = 1; for (int i = 1; i <= n; i++) fac[i] = fac[i-1] * i; infac[n] = fac[n].inv(); for (int i = n; i >= 1; i--) infac[i-1] = infac[i] * i; } mint operator()(int n, int k) { if (k < 0 || k > n) return 0; return fac[n] * infac[k] * infac[n-k]; } }; void solve() { int K; cin >> K; vector C(K); rep(i, 0, K) cin >> C[i]; int N = 0; rep(i, 0, K) N += C[i]; Combination comb(N); mint ans = 0; vector cnt(N+1); for (int d = 1; d <= N; d++) { int t = gcd(N, d); cnt[t]++; } for (int d = 1; d <= N; d++) { if (N%d) continue; vector D(K); bool f = true; rep(i, 0, K) { if (C[i]%(N/d) != 0) { f = false; } D[i] = C[i]/(N/d); } if (f) { mint plus = comb.fac[d]; rep(i, 0, K) plus *= comb.infac[D[i]]; ans += plus * cnt[d]; } } ans /= N; cout << ans.val() << endl; } int main() { int T = 1; //cin >> T; while(T--) solve(); }