#include <bits/stdc++.h>
using namespace std;
int R[400009], L, A[400009], B[400009], d[21][400009], n;
inline int qpow(long long x, int y) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = ans * x % 998244353;
    y >>= 1, x = x * x % 998244353;
  }
  return ans;
}
void NTT(int *k, int f) {
  for (int i = 0; i < n; i++)
    if (R[i] > i) swap(k[i], k[R[i]]);
  for (int i = 1; i < n; i <<= 1) {
    int gn = qpow(3, (998244353 - 1) / (i << 1));
    for (int j = 0; j < n; j += (i << 1)) {
      int g = 1, x, y;
      for (int p = 0; p < i; p++, g = (long long)g * gn % 998244353) {
        x = k[p + j], y = (long long)g * k[p + j + i] % 998244353;
        k[p + j] = (x + y) % 998244353,
              k[p + j + i] = (x - y + 998244353) % 998244353;
      }
    }
  }
  if (f == -1) {
    int y = qpow(n, 998244353 - 2);
    reverse(k + 1, k + n);
    for (int i = 0; i < n; i++) k[i] = (long long)k[i] * y % 998244353;
  }
}
void solve(int l, int r, int dep) {
  if (l == r) {
    A[1] = 1, A[0] = l;
    return;
  }
  int mid = (l + r) >> 1, m = max(mid - l + 1, r - mid);
  solve(l, mid, dep + 1);
  for (int i = 0; i <= mid - l + 1; i++) d[dep][i] = A[i], A[i] = 0;
  solve(mid + 1, r, dep + 1);
  for (int i = 0; i <= mid - l + 1; i++) B[i] = d[dep][i];
  L = 0;
  for (n = 1; n <= 2 * m; n <<= 1) L++;
  for (int i = 0; i < n; i++) R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));
  NTT(A, 1), NTT(B, 1);
  for (int i = 0; i < n; i++)
    A[i] = (long long)A[i] * B[i] % 998244353, B[i] = 0;
  NTT(A, -1);
}
int main() {
  int q, a, b;
  scanf("%d%d%d", &q, &a, &b);
  q--;
  if (a == 0 || b == 0) puts("0"), exit(0);
  if (q) solve(0, q - 1, 0);
  long long ans = A[a + b - 2];
  if (!q) ans = 1;
  for (int i = a; i <= a + b - 2; i++) ans = ans * i % 998244353;
  for (int i = 2; i <= b - 1; i++)
    ans = ans * qpow(i, 998244353 - 2) % 998244353;
  printf("%lld", ans);
  return 0;
}
