#include <bits/stdc++.h>
using namespace std;
using vll = vector<long long>;
inline long long getmod(long long n, long long m) { return (n % m + m) % m; }
inline long long getmodinverse(long long a, long long mod) {
  long long b = mod, u = 1, v = 0, t;
  while (b) {
    t = a / b;
    swap(a -= b * t, b);
    swap(u -= v * t, v);
  }
  return getmod(u, mod);
}
template <long long PRIME>
struct zpz {
  long long r;
  zpz() : r(0) {}
  zpz(long long n) : r(n) { assert(0 <= n && n < PRIME); }
  friend zpz operator*(const zpz& x, const zpz& y) {
    return (x.r * y.r) % PRIME;
  }
  friend zpz operator-(const zpz& x, const zpz& y) {
    return (x.r - y.r + PRIME) % PRIME;
  }
  friend zpz operator+(const zpz& x, const zpz& y) {
    return (x.r + y.r) % PRIME;
  }
  friend zpz operator/(const zpz& x, const zpz& y) {
    return (x.r * getmodinverse(y.r, PRIME)) % PRIME;
  }
  zpz operator-() const { return zpz((PRIME - r) % PRIME); }
};
template <typename T>
struct vec3 {
  T a, b, c;
  vec3() : a(0), b(0), c(0) {}
  vec3(T x, T y, T z) : a(x), b(y), c(z) {}
  friend vec3 operator-(const vec3& x, const vec3& y) {
    return vec3(x.a - y.a, x.b - y.b, x.c - y.c);
  }
  friend vec3 operator+(const vec3& x, const vec3& y) {
    return vec3(x.a + y.a, x.b + y.b, x.c + y.c);
  }
  friend vec3 operator*(const vec3& x, const T& f) {
    return vec3(x.a * f, x.b * f, x.c * f);
  }
  friend vec3 operator*(const T& f, const vec3& x) {
    return vec3(x.a * f, x.b * f, x.c * f);
  }
  vec3 operator-() const { return vec3(-a, -b, -c); }
  vec3& operator+=(const vec3& rhs) {
    a = a + rhs.a;
    b = b + rhs.b;
    c = c + rhs.c;
    return *this;
  }
  vec3& operator-=(const vec3& rhs) {
    a = a - rhs.a;
    b = b - rhs.b;
    c = c - rhs.c;
    return *this;
  }
};
static const long long PRIME = 998244353;
static const long long N = 1e5 + 10;
static const long long M = 3e5 + 10;
using frac = zpz<PRIME>;
using frac3 = vec3<frac>;
long long n, m = 0;
vll biscuits(N);
vector<frac3> seq(M);
inline void getinput() {
  cin >> n;
  for (long long i = 0; i < n; i++) {
    cin >> biscuits[i];
    m += biscuits[i];
  }
}
int main(int argc, char const* argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  getinput();
  seq[0] = vec3<frac>(1, 0, 0);
  seq[1] = vec3<frac>(0, 1, 0);
  vec3<frac> unit(0, 0, 1);
  for (long long a = 1; a <= m - 1; a++) {
    long long inv = getmodinverse(getmod(m - a, PRIME), PRIME);
    long long num1 = getmod(m + a * n - 2 * a, PRIME);
    long long num2 = getmod(-a * (n - 1), PRIME);
    frac c1((num1 * inv) % PRIME);
    frac c2((num2 * inv) % PRIME);
    seq[a + 1] = c1 * seq[a] + c2 * (seq[a - 1] + unit);
  }
  frac3 add;
  for (int i = 0; i < n; i++) {
    add += seq[biscuits[i]];
  }
  vec3<frac> sub = (n - 1) * seq[0] + seq[m];
  vec3<frac> res = add - sub;
  cout << res.c.r << endl;
  return 0;
}
