#include <bits/stdc++.h>
const int mo = 998244353;
const int maxn = (1 << 21) + 10;
const int G = 3;
using namespace std;
int ans[20][maxn], n, a, b, rev[maxn];
int ksm(int x, int y) {
  int sum = 1;
  for (; y; y >>= 1, x = 1LL * x * x % mo)
    if (y & 1) sum = 1LL * sum * x % mo;
  return sum;
}
void ntt(int *z, int lim, int flag) {
  for (int i = 0; i < lim; i++)
    if (i < rev[i]) swap(z[i], z[rev[i]]);
  for (int i = 1; i < lim; i <<= 1) {
    int x = ksm(G, (mo - 1) / (i << 1));
    if (flag) x = ksm(x, mo - 2);
    for (int j = 0; j < lim; j += (i << 1)) {
      int v = 1;
      for (int k = 0; k < i; k++, v = 1LL * v * x % mo) {
        int v1 = z[j + k], v2 = 1LL * z[j + k + i] * v % mo;
        z[j + k] = (v1 + v2) % mo;
        z[j + k + i] = (v1 - v2 + mo) % mo;
      }
    }
  }
}
void solve(int l, int r, int d) {
  if (l == r) {
    ans[d][0] = l;
    ans[d][1] = 1;
    return;
  }
  int mid = (l + r) >> 1;
  solve(l, mid, d);
  solve(mid + 1, r, d + 1);
  int lg = 0, lim = 1;
  for (; lim <= r - l + 1; lim <<= 1) lg++;
  for (int i = 0; i < lim; i++)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (lg - 1));
  for (int i = mid - l + 2; i < lim; i++) ans[d][i] = 0;
  for (int i = r - mid + 1; i < lim; i++) ans[d + 1][i] = 0;
  ntt(ans[d], lim, 0);
  ntt(ans[d + 1], lim, 0);
  for (int i = 0; i < lim; i++)
    ans[d][i] = 1LL * ans[d][i] * ans[d + 1][i] % mo;
  ntt(ans[d], lim, 1);
  int m = ksm(lim, mo - 2);
  for (int i = 0; i < lim; i++) ans[d][i] = 1LL * ans[d][i] * m % mo;
}
int C(int x, int y) {
  int sum1 = 1, sum2 = 1;
  for (int i = 0; i < y; i++) {
    sum1 = 1LL * sum1 * (x - i) % mo;
    sum2 = 1LL * sum2 * (i + 1) % mo;
  }
  sum1 = 1LL * sum1 * ksm(sum2, mo - 2) % mo;
  return sum1;
}
int main() {
  scanf("%d %d %d", &n, &a, &b);
  if (!a || !b || a + b - 2 > n - 1) {
    puts("0");
    return 0;
  }
  if (n == 1) {
    puts("1");
    return 0;
  }
  solve(0, n - 2, 0);
  int ans1 = 1LL * ans[0][a + b - 2] * C(a + b - 2, a - 1) % mo;
  printf("%d\n", ans1);
  return 0;
}
