#include <bits/stdc++.h>
using namespace std;
const long long g = 3, inv3 = 332748118, mod = 998244353;
long long n, A, B, jc[200005], inv[200005], r[400005], f[100005], a[400005],
    b[400005], h[400005], d[400005];
long long read() {
  long long f = 0, w = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    f = f * 10 + ch - '0';
    ch = getchar();
  }
  return f * w;
}
long long qpow(long long x, long long y) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = ans * x % mod;
    x = x * x % mod;
    y >>= 1;
  }
  return ans;
}
void change(long long *c, long long len) {
  for (long long i = 0; i < len; i++) {
    r[i] = r[i >> 1] >> 1;
    if (i & 1) r[i] |= (len >> 1);
  }
  for (long long i = 0; i < len; i++)
    if (i < r[i]) swap(c[i], c[r[i]]);
}
void ntt(long long *c, long long len, long long type) {
  change(c, len);
  for (long long l = 2; l <= len; l <<= 1) {
    long long W = qpow(type == 1 ? g : inv3, (mod - 1) / l);
    for (long long j = 0; j < len; j += l) {
      long long w = 1;
      for (long long k = j; k < j + l / 2; k++, w = w * W % mod) {
        long long p = c[k], t = w * c[k + l / 2] % mod;
        c[k] = (p + t) % mod;
        c[k + l / 2] = (p - t + mod) % mod;
      }
    }
  }
  if (type == -1) {
    long long inv = qpow(len, mod - 2);
    for (long long i = 0; i < len; i++) c[i] = c[i] * inv % mod;
  }
}
void mul(long long *f, long long *g, long long len1, long long len2) {
  long long lim = 1;
  while (lim < len1 + len2) lim <<= 1;
  ntt(f, lim, 1), ntt(g, lim, 1);
  for (long long i = 0; i < lim; i++) f[i] = f[i] * g[i] % mod;
  ntt(f, lim, -1);
}
long long calc(long long x, long long y) {
  if (x < 0 || y < 0 || x < y) return 0;
  return jc[x] * inv[y] % mod * inv[x - y] % mod;
}
void init() {
  jc[0] = inv[0] = 1;
  for (long long i = 1; i <= 200000; i++) jc[i] = jc[i - 1] * i % mod;
  inv[200000] = qpow(jc[200000], mod - 2);
  for (long long i = 199999; i >= 1; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
}
void solve(long long *f, long long len) {
  if (!len) {
    f[0] = 1;
    return;
  }
  if (len == 1) {
    f[1] = 1;
    return;
  }
  if (len & 1) {
    solve(f, len - 1);
    for (long long i = len; i >= 1; i--) {
      f[i] = ((len - 1) * f[i] % mod + f[i - 1]) % mod;
    }
    f[0] = f[0] * (len - 1) % mod;
    return;
  }
  long long t = len >> 1;
  solve(f, t);
  for (long long i = 0; i <= t; i++) {
    a[i] = f[i] * jc[i] % mod;
    b[i] = qpow(t, i) * inv[i] % mod;
  }
  reverse(a, a + t + 1);
  mul(a, b, t + 1, t + 1);
  for (long long i = 0; i <= t; i++) h[i] = a[t - i] * inv[i] % mod;
  mul(f, h, t + 1, t + 1);
  long long lim = 1;
  while (lim < 2 * (n + 1)) lim <<= 1;
  for (long long i = t + 1; i < lim; i++) a[i] = b[i] = h[i] = 0;
  for (long long i = len + 1; i < lim; i++) f[i] = 0;
}
signed main() {
  n = read(), A = read(), B = read();
  init();
  solve(d, n - 1);
  if (A + B - 2 > n - 1)
    puts("0");
  else
    printf("%lld\n", d[A + B - 2] * calc(A + B - 2, A - 1) % mod);
  return 0;
}
