package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
func modPow(a, e int64) int64 {
res := int64(1)
a %= MOD
for e > 0 {
if e&1 == 1 {
res = (res * a) % MOD
}
a = (a * a) % MOD
e >>= 1
}
return res
}
func modInv(a int64) int64 {
return modPow(a, MOD-2)
}
func main() {
in := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
a := make([]int64, n)
var N int64 = 0
var maxA int64 = 0
for i := 0; i < n; i++ {
var x int64
fmt.Fscan(in, &x)
a[i] = x
N += x
if x > maxA {
maxA = x
}
}
if N <= 1 {
fmt.Println(0)
return
}
// Precompute prefix sums of 1/(N-j) for j=1..maxA-1
mx := int(maxA)
hPref := make([]int64, mx)
var sum int64 = 0
for j := 1; j <= mx-1; j++ {
den := (N%MOD - int64(j)) % MOD
if den < 0 {
den += MOD
}
inv := modInv(den)
sum += inv
if sum >= MOD {
sum -= MOD
}
hPref[j] = sum
}
inv2 := (MOD + 1) / 2
Nm := N % MOD
// F_N = (N-1)(N-2)/2
fN := ((N - 1) % MOD) * ((N - 2) % MOD) % MOD
fN = fN * inv2 % MOD
// Delta S = C(N,2) - sum C(a_i,2)
cN2 := N % MOD * ((N - 1) % MOD) % MOD * inv2 % MOD
var sumC int64 = 0
for i := 0; i < n; i++ {
ai := a[i] % MOD
if a[i] >= 2 {
val := ai * ((a[i] - 1) % MOD) % MOD * inv2 % MOD
sumC += val
if sumC >= MOD {
sumC -= MOD
}
}
}
deltaS := cN2 - sumC
if deltaS < 0 {
deltaS += MOD
}
// sum F_{a_i}
var sumF int64 = 0
twoN := (2 * Nm) % MOD
N2 := (Nm * Nm) % MOD
for i := 0; i < n; i++ {
k := a[i]
if k <= 1 {
continue
}
km := k % MOD
// term1 = (k-1)*(2N - k - 2)/2
t1 := ((k - 1) % MOD) * ((twoN - km - 2) % MOD) % MOD
if t1 < 0 {
t1 += MOD
}
t1 = t1 * inv2 % MOD
// C = (k+1)N - N^2 - k
C := (((((k+1)%MOD)*Nm)%MOD - N2) % MOD - km) % MOD
if C < 0 {
C += MOD
}
// Hdiff = H_{N-1} - H_{N-k} = sum_{j=1}^{k-1} 1/(N-j)
Hdiff := hPref[k-1]
val := (t1 + C*Hdiff%MOD) % MOD
sumF += val
if sumF >= MOD {
sumF -= MOD
}
}
ans := (deltaS + fN - sumF) % MOD
if ans < 0 {
ans += MOD
}
fmt.Println(ans)
}