#include <bits/stdc++.h>
using namespace std;
const int M = 1e6 + 1, MAX = 2e5 + 1;
const long long Mod = 998244353, G = 3;
long long rec[M];
long long GetW(long long a, long long b, int i) {
  if (rec[i]) return rec[i];
  long long res = 1;
  for (; b; b >>= 1, a = (a * a) % Mod)
    if (b & 1) res = (res * a) % Mod;
  return rec[i] = res;
}
long long fpow(long long a, long long b = Mod - 2) {
  long long res = 1;
  for (; b; b >>= 1, a = (a * a) % Mod)
    if (b & 1) res = (res * a) % Mod;
  return res;
}
int R[M], K, lg;
void init(int n) {
  for (K = 1, lg = 0; K <= n; K <<= 1, ++lg)
    ;
  --lg;
  for (int i = 1; i < K; i++) R[i] = (R[i >> 1] >> 1) | ((i & 1) << lg);
}
void NTT(long long *a, int n, int f) {
  for (int i = 0; i < n; i++)
    if (i < R[i]) swap(a[i], a[R[i]]);
  for (int i = 2; i <= n; i <<= 1) {
    long long wn = GetW(G, (Mod - 1) / i, i), w, x, y;
    int now = i >> 1;
    for (int j = 0; j < n; j += i) {
      w = 1;
      for (int k = j; k < j + now; k++, w = (w * wn) % Mod) {
        x = a[k];
        y = w * a[k + now] % Mod;
        a[k] = (x + y) % Mod;
        a[k + now] = (x - y) % Mod;
        if (a[k + now] < 0) a[k + now] += Mod;
      }
    }
  }
  if (f == -1) {
    reverse(a + 1, a + n);
    long long inv = fpow(n);
    for (int i = 0; i < n; i++) a[i] = (a[i] * inv) % Mod;
  }
}
void FFT(long long *a, long long *b) {
  NTT(a, K, 1);
  NTT(b, K, 1);
  for (int i = 0; i < K; i++) a[i] = (a[i] * b[i]) % Mod;
  NTT(a, K, -1);
}
long long A[M], B[M];
long long S[M], fac[M], inv_fac[M], pw[M];
void Init_S(int L) {
  if (L <= 1) {
    S[L] = 1;
    return;
  }
  if (L & 1) {
    Init_S(L - 1);
    for (int i = L; i; i--)
      S[i] = (S[i - 1] + 1ll * S[i] * (L - 1) % Mod) % Mod;
    return;
  }
  Init_S(L >> 1);
  int l = L >> 1;
  pw[0] = 1;
  for (int i = 1; i <= l; i++) pw[i] = (1ll * pw[i - 1] * l) % Mod;
  for (int i = 0; i <= l; i++) {
    A[i] = S[i] * fac[i] % Mod;
    B[i] = pw[i] * inv_fac[i] % Mod;
  }
  reverse(B, B + l + 1);
  init(L);
  FFT(A, B);
  for (int i = 0; i <= l; i++) A[i] = A[i + l] * inv_fac[i] % Mod;
  for (int i = l + 1; i < K; i++) A[i] = B[i] = 0;
  for (int i = 0; i <= l; i++) B[i] = S[i];
  FFT(A, B);
  for (int i = 0; i <= L; i++) S[i] = A[i];
  for (int i = 0; i < K; i++) A[i] = B[i] = 0;
}
void Init_C() {
  fac[0] = inv_fac[0] = 1;
  for (long long i = 1; i < MAX; i++) fac[i] = (fac[i - 1] * i) % Mod;
  inv_fac[MAX - 1] = fpow(fac[MAX - 1]);
  for (int i = MAX - 2; i > 0; i--)
    inv_fac[i] = (inv_fac[i + 1] * (i + 1ll)) % Mod;
}
long long C(int n, int m) {
  if (m > n) return 0;
  if (m == n || !m) return 1;
  return fac[n] * inv_fac[m] % Mod * inv_fac[n - m] % Mod;
}
long long ans;
int n, aa, bb;
int main() {
  Init_C();
  scanf("%d%d%d", &n, &aa, &bb);
  Init_S(n - 1);
  ans = C(aa + bb - 2, aa - 1) * S[aa + bb - 2] % Mod;
  printf("%I64d\n", ans);
  return 0;
}
