#include <bits/stdc++.h>
using namespace std;
int get(int s) { return s > 1 ? 32 - __builtin_clz(s - 1) : 0; }
namespace NTT {
const long long root = 3;
long long modpow(long long b, long long p) {
  return !p ? 1
            : modpow(b * b % 998244353, p / 2) * (p & 1 ? b : 1) % 998244353;
}
long long inv(long long b) { return modpow(b, 998244353 - 2); }
vector<long long> ntt(vector<long long>& a) {
  int n = a.size(), x = get(n);
  vector<long long> res, RES(n), roots(n);
  roots[0] = 1, roots[1] = modpow(root, (998244353 - 1) / n);
  for (int i = (2); i < (n); i++)
    roots[i] = roots[i - 1] * roots[1] % 998244353;
  res = a;
  for (int i = (1); i < (x + 1); i++) {
    int inc = n >> i;
    for (int j = 0; j < (inc); j++)
      for (int k = 0; k < n; k += inc) {
        int t = 2 * k % n + j;
        RES[k + j] = (res[t] + roots[k] * res[t + inc]) % 998244353;
      }
    swap(res, RES);
  }
  return res;
}
vector<long long> ntt_rev(vector<long long>& a) {
  vector<long long> res = ntt(a);
  long long in = inv(a.size());
  for (int i = 0; i < (res.size()); i++) res[i] = res[i] * in % 998244353;
  reverse(res.begin() + 1, res.end());
  return res;
}
vector<long long> brute(vector<long long>& a, vector<long long>& b) {
  vector<long long> c(a.size() + b.size() - 1);
  for (int i = 0; i < (a.size()); i++)
    for (int j = 0; j < (b.size()); j++)
      c[i + j] = (c[i + j] + a[i] * b[j]) % 998244353;
  return c;
}
vector<long long> conv(vector<long long> a, vector<long long> b) {
  int s = a.size() + b.size() - 1, L = get(s), n = 1 << L;
  if (s <= 0) return {};
  if (s <= 200) return brute(a, b);
  a.resize(n);
  a = ntt(a);
  b.resize(n);
  b = ntt(b);
  for (int i = 0; i < (n); i++) a[i] = a[i] * b[i] % 998244353;
  a = ntt_rev(a);
  a.resize(s);
  return a;
}
}  // namespace NTT
int N, A, B;
long long C(long long n, long long r) {
  long long res = 1;
  long long div = 1;
  for (int i = 0; i < (r); i++) res = res * (n - i) % 998244353;
  for (int i = (1); i < (r + 1); i++) div = div * i % 998244353;
  return res * NTT::modpow(div, 998244353 - 2) % 998244353;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> A >> B;
  if (A + B - 2 > N - 1 || A == 0 || B == 0) {
    cout << 0 << endl;
    return 0;
  }
  queue<vector<long long> > q;
  vector<long long> strt(1);
  strt[0] = 1;
  q.push(strt);
  for (int i = 0; i < (N - 1); i++) {
    vector<long long> mult(2);
    mult[1] = 1;
    mult[0] = i;
    q.push(mult);
  }
  while (q.size() > 1) {
    vector<long long> a = q.front();
    q.pop();
    vector<long long> b = q.front();
    q.pop();
    q.push(NTT::conv(a, b));
  }
  cout << q.front()[A + B - 2] * C(A + B - 2, A - 1) % 998244353 << endl;
  return 0;
}
