#include <bits/stdc++.h>
using namespace std;
char buf[1 << 20], *p1, *p2;
template <class T>
inline void read(T &n) {
  char ch =
      (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
           ? 0
           : *p1++);
  T w = 1, x = 0;
  while (!isdigit(ch)) {
    if (ch == '-') w = -1;
    ch =
        (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
             ? 0
             : *p1++);
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch =
        (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
             ? 0
             : *p1++);
  }
  n = x * w;
}
const int mod = 998244353;
inline int add(int x, int y) {
  x += y;
  return x >= mod ? x - mod : x;
}
inline int mul(int x, int y) { return 1ll * x * y % mod; }
int n, a, b;
namespace solve1 {
const int maxn = 2005;
int C[maxn][maxn], f[maxn][maxn];
void main() {
  f[0][0] = 1;
  for (int i = 0; i <= n; i++) C[i][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++) {
      f[i][j] = add(f[i - 1][j - 1], mul(i - 1, f[i - 1][j]));
      C[i][j] = add(C[i - 1][j - 1], C[i - 1][j]);
    }
  int ans = 0;
  for (int i = a; i <= n - b + 1; i++)
    ans = add(ans, mul(C[n - 1][i - 1], mul(f[i - 1][a - 1], f[n - i][b - 1])));
  cout << ans << endl;
}
}  // namespace solve1
namespace solve2 {
const int maxn = 1 << 19;
int quick_pow(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) res = mul(res, x);
    x = mul(x, x), y >>= 1;
  }
  return res;
}
void ntt(int *A, int N, int opt) {
  for (int i = 0, j = 0; i < N; i++) {
    if (i < j) swap(A[i], A[j]);
    for (int l = (N >> 1); (j ^= l) < l; l >>= 1)
      ;
  }
  for (int l = 2; l <= N; l <<= 1) {
    int m = (l >> 1), w0 = quick_pow(3, (mod - 1) / l);
    if (opt == -1) w0 = quick_pow(w0, mod - 2);
    for (int j = 0; j < N; j += l)
      for (int i = j, w = 1; i < j + m; i++, w = mul(w, w0)) {
        int v = mul(A[i + m], w);
        A[i + m] = add(A[i], mod - v);
        A[i] = add(A[i], v);
      }
  }
  if (opt == -1) {
    int tmp = quick_pow(N, mod - 2);
    for (int i = 0; i < N; i++) A[i] = mul(A[i], tmp);
  }
}
int A[maxn], B[maxn];
vector<int> solve(int l, int r) {
  vector<int> res;
  if (l == r) {
    res.resize(2);
    res[0] = l - 1, res[1] = 1;
    return res;
  }
  int mid = (l + r) >> 1;
  vector<int> a = solve(l, mid);
  vector<int> b = solve(mid + 1, r);
  int N = 1, len = r - l + 1;
  while (N <= len) N <<= 1;
  for (int i = 0; i <= mid - l + 1; i++) A[i] = a[i];
  for (int i = 0; i <= r - mid; i++) B[i] = b[i];
  for (int i = mid - l + 2; i < N; i++) A[i] = 0;
  for (int i = r - mid + 1; i < N; i++) B[i] = 0;
  ntt(A, N, 1), ntt(B, N, 1);
  for (int i = 0; i < N; i++) A[i] = mul(A[i], B[i]);
  ntt(A, N, -1), res.resize(len + 1);
  for (int i = 0; i <= len; i++) res[i] = A[i];
  return res;
}
int fac[maxn], ifac[maxn];
void main() {
  vector<int> res = solve(1, n - 1);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = mul(fac[i - 1], i);
  ifac[n] = quick_pow(fac[n], mod - 2);
  for (int i = n; i >= 1; i--) ifac[i - 1] = mul(ifac[i], i);
  cout << mul(res[a + b - 2],
              mul(fac[a + b - 2], mul(ifac[a - 1], ifac[b - 1])))
       << endl;
}
}  // namespace solve2
int main() {
  read(n), read(a), read(b);
  if (a + b > n + 1 || a == 0 || b == 0) puts("0"), exit(0);
  if (n == 1) puts("1"), exit(0);
  if (n <= 2000)
    solve1::main();
  else
    solve2::main();
  return 0;
}
