#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007LL;
long long large = 2000000000000000000LL;
const long long Mod = 998244353;
const long long g = 3;
long long fp(long long a, long long k) {
  long long res = 1LL;
  while (k > 0) {
    if (k & 1) res = res * a % Mod;
    a = a * a % Mod;
    k >>= 1;
  }
  return res;
}
void change(vector<long long>& y, int len) {
  for (int i = 1, j = len / 2; i < len - 1; i++) {
    if (i < j) swap(y[i], y[j]);
    int k = len / 2;
    while (j >= k) {
      j -= k;
      k /= 2;
    }
    if (j < k) j += k;
  }
}
void ntt(vector<long long>& y, int len, int on) {
  change(y, len);
  for (int h = 2; h <= len; h <<= 1) {
    long long wn = fp(g, (Mod - 1) / h);
    if (on == -1) wn = fp(wn, Mod - 2);
    for (int j = 0; j < len; j += h) {
      long long w = 1LL;
      for (int k = j; k < j + h / 2; k++) {
        long long u = y[k];
        long long t = w * y[k + h / 2] % Mod;
        y[k] = (u + t) % Mod;
        y[k + h / 2] = (u - t + Mod) % Mod;
        w = w * wn % Mod;
      }
    }
  }
  if (on == -1) {
    long long t = fp(len, Mod - 2);
    for (int i = 0; i < len; i++) y[i] = y[i] * t % Mod;
  }
}
void gcdE(long long a, long long b, long long& d, long long& x, long long& y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    gcdE(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long inv(long long a, long long n) {
  long long d, x, y;
  gcdE(a, n, d, x, y);
  return d == 1 ? (x + n) % n : -1;
}
int main() {
  long long n, a, b;
  cin >> n >> a >> b;
  n--;
  if (a + b - 2 < 0 || a + b - 2 > n || a == 0 || b == 0) {
    cout << 0 << endl;
    return 0;
  }
  vector<vector<long long> > g(n, vector<long long>());
  for (int i = 0; i < n; i++) {
    g[i].push_back(i);
    g[i].push_back(1LL);
  }
  long long q = 1;
  while (q < n) q <<= 1;
  for (int i = n; i < q; i++) {
    g.push_back(vector<long long>());
    g.back().push_back(1);
    g.back().push_back(0);
  }
  for (long long d = 2; d <= q; d <<= 1) {
    for (long long i = 0; i < q; i += d) {
      int l = (int)g[i].size();
      for (int j = 0; j < l; j++) {
        g[i].push_back(0);
        g[i + d / 2].push_back(0);
      }
      ntt(g[i], g[i].size(), 1);
      ntt(g[i + d / 2], g[i + d / 2].size(), 1);
      for (int j = 0; j < (int)g[i].size(); j++) {
        g[i][j] *= g[i + d / 2][j];
        g[i][j] %= Mod;
      }
      ntt(g[i], g[i].size(), -1);
    }
  }
  long long ans = g[0][a + b - 2];
  long long p = 1;
  for (long long i = 1; i <= a + b - 2; i++) {
    p *= i;
    p %= Mod;
    if (i == a - 1) {
      ans *= inv(p, Mod);
      ans %= Mod;
    }
    if (i == b - 1) {
      ans *= inv(p, Mod);
      ans %= Mod;
    }
  }
  ans *= p;
  ans %= Mod;
  cout << ans << endl;
  return 0;
}
