```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func power(base, exp int64) int64 {
res := int64(1)
base %= 998244353
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % 998244353
}
base = (base * base) % 998244353
exp /= 2
}
return res
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
A := make([]int, n)
S := 0
for i := 0; i < n; i++ {
scanner.Scan()
A[i], _ = strconv.Atoi(scanner.Text())
S += A[i]
}
M := int64(998244353)
inv := make([]int64, S+1)
if S >= 1 {
inv[1] = 1
for i := 2; i <= S; i++ {
inv[i] = (M - M/int64(i)) * inv[M%int64(i)] % M
}
}
D := make([]int64, S)
invN := power(int64(n), M-2)
nMinus1 := int64(n - 1)
C2 := (int64(S) * nMinus1) % M
C2 = (C2 * invN) % M
if S > 0 {
D[0] = (M - nMinus1*invN%M) % M
for x := int64(1); x < int64(S); x++ {
term1 := (x * nMinus1) % M
term1 = (term1 * D[x-1]) % M
num := (term1 - C2 + M) % M
D[x] = (num * inv[int64(S)-x]) % M
}
}
f := make([]int64, S+1)
f[0] = 0
for i := 1; i <= S; i++ {
f[i] = (f[i-1] + D[i-1]) % M
}
ans := int64(0)
for _, a := range A {
ans = (ans + f[a]) % M
}
ans = (ans - f[S] + M) % M
fmt.Println(ans)
}
```