// Enjoy your stay. #include #define EPS 1e-9 #define INF 1070000000LL #define MOD 1000000007LL #define fir first #define foreach(it,X) for(auto it=(X).begin();it!=(X).end();it++) #define ite iterator #define mp make_pair #define mt make_tuple #define rep(i,n) rep2(i,0,n) #define rep2(i,m,n) for(int i=m;i<(n);i++) #define pb push_back #define sec second #define sz(x) ((int)(x).size()) using namespace std; typedef istringstream iss; typedef long long ll; typedef pair pi; typedef stringstream sst; typedef vector vi; int K; int C[100010]; ll extgcd(ll a,ll b,ll& x, ll& y){ ll d=a; if(b)d=extgcd(b,a%b,y,x),y-=(a/b)*x; else x=1,y=0; return d; } ll mod_inverse(ll a,ll m){ ll x,y; extgcd(a,m,x,y); return ((ll)m+x%m)%m; } ll fact[1000010]; ll num[1000010]; ll inv[1000010]; ll getinv[1000010]; ll factinv[1000010]; vi primes; vi divs; void getInv(int n){ inv[1]=1; rep2(i,2,n+1)inv[i]=inv[MOD%i]*(MOD-MOD/i)%MOD; } ll numPrime(ll n){ ll res = 0; rep(i,sz(primes)){ while(n % primes[i] == 0){ n /= primes[i]; res++; } } return res; } int main(){ cin.tie(0); ios_base::sync_with_stdio(0); cin>>K; rep(i,K)cin>>C[i]; int S = 0; rep(i,K)S += C[i]; ll S_ = S; rep2(i,2,S+1){ if(S_ % i == 0){ primes.pb(i); while(S_ % i == 0){ S_ /= i; } } } rep2(i,1,S+1){ if(S % i == 0){ divs.pb(i); } } getInv(S); factinv[0] = 1; rep(i,S) factinv[i+1] = factinv[i] * inv[i+1] % MOD; fact[0] = 1; rep(i,S) fact[i+1] = fact[i] * (i+1) % MOD; ll ans = 0; rep2(i,1,S+1)if(S % i == 0){ //cerr<