import sys import math from math import gcd from functools import reduce from collections import defaultdict MOD = 10**9 + 7 # Precompute factorial, inverse factorial, and phi up to 1e6 MAX = 10**6 # Factorial and inverse factorial fact = [1] * (MAX + 1) for i in range(1, MAX + 1): fact[i] = fact[i-1] * i % MOD inv_fact = [1] * (MAX + 1) inv_fact[MAX] = pow(fact[MAX], MOD-2, MOD) for i in range(MAX-1, -1, -1): inv_fact[i] = inv_fact[i+1] * (i+1) % MOD # Euler's totient function (phi) phi = list(range(MAX + 1)) for i in range(2, MAX + 1): if phi[i] == i: # i is prime for j in range(i, MAX + 1, i): phi[j] -= phi[j] // i def compute_gcd(arr): return reduce(math.gcd, arr) def get_divisors(n): divisors = set() for i in range(1, int(n**0.5)+1): if n % i == 0: divisors.add(i) divisors.add(n//i) return sorted(divisors) def main(): input = sys.stdin.read().split() K = int(input[0]) C = list(map(int, input[1:1+K])) N = sum(C) if N == 0: print(0) return G = compute_gcd(C) divisors = get_divisors(N) total = 0 valid_g = [] for g in divisors: d_prime = N // g if G % d_prime != 0: continue valid_g.append(g) for g in valid_g: d_prime = N // g s_list = [c // d_prime for c in C] s_counts = defaultdict(int) for s in s_list: s_counts[s] += 1 product_inv = 1 for s, cnt in s_counts.items(): inv = pow(inv_fact[s], cnt, MOD) product_inv = product_inv * inv % MOD comb = fact[g] * product_inv % MOD phi_val = phi[d_prime] # phi(N/g) = phi(d_prime) total = (total + comb * phi_val) % MOD inv_N = pow(N, MOD-2, MOD) ans = total * inv_N % MOD print(ans) if __name__ == "__main__": main()