#include <bits/stdc++.h>
using namespace std;
const long long p = 998244353;
const int orz = 131075;
long long g = 3, inv[orz], invf[orz], fac[orz];
long long qp(long long x, long long y) {
  long long ret = 1;
  while (y) {
    if (y & 1LL) ret = ret * x % p;
    x = x * x % p;
    y >>= 1LL;
  }
  return ret;
}
void prepare() {
  inv[1] = 1;
  invf[0] = invf[1] = 1;
  fac[0] = fac[1] = 1;
  for (int i(2); i < orz; ++i)
    fac[i] = fac[i - 1] * i % p, inv[i] = (p - p / i) * inv[p % i] % p,
    invf[i] = invf[i - 1] * inv[i] % p;
}
struct polynomial {
  vector<long long> A;
  polynomial() { A.clear(); }
  inline int g_time() { return A.size() - 1; }
  void NTT(int lim, vector<int> rev, int op) {
    for (int i = 0; i < lim; ++i)
      if (i < rev[i]) swap(A[i], A[rev[i]]);
    for (int mid(1); mid < lim; mid <<= 1) {
      long long omg_n = qp(op ? g : inv[g], (p - 1) / (2 * mid));
      for (int l = 0; l < lim; l += (2 * mid)) {
        long long tmp = 1;
        for (int j(0); j < mid; ++j, tmp = tmp * omg_n % p) {
          long long X = A[l + j], Y = A[l + j + mid];
          A[l + j] = (X + Y * tmp % p) % p,
                A[l + j + mid] = (X - Y * tmp % p + p) % p;
        }
      }
    }
  }
};
polynomial Convolution(polynomial F, polynomial G, int at, int op = 0) {
  int lim = 1, ls = 0;
  while (lim <= at) lim <<= 1, ++ls;
  vector<int> rev;
  rev.clear();
  rev.resize(lim);
  rev[0] = 0;
  for (int i(1); i < lim; ++i)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << ls - 1);
  F.A.resize(lim);
  G.A.resize(lim);
  F.NTT(lim, rev, 1);
  G.NTT(lim, rev, 1);
  if (op == 0) {
    for (int i(0); i < lim; ++i) F.A[i] = F.A[i] * G.A[i] % p;
  }
  if (op == 1) {
    for (int i(0); i < lim; ++i)
      F.A[i] = F.A[i] * ((2 - G.A[i] * F.A[i] % p + p) % p) % p;
  }
  F.NTT(lim, rev, 0);
  long long tmp = qp(lim, p - 2);
  for (int i(0); i <= at; ++i) F.A[i] = F.A[i] * tmp % p;
  F.A.resize(at + 1);
  return F;
}
void Get_Inv(polynomial F, polynomial &G, int n) {
  if (n == 1) {
    G.A.resize(1);
    G.A[0] = qp(F.A[0], p - 2);
    return;
  }
  Get_Inv(F, G, (n + 1) / 2);
  polynomial tmp;
  tmp.A.resize(min(n, F.g_time() + 1));
  for (int i(0); i < min(n, F.g_time() + 1); ++i) tmp.A[i] = F.A[i];
  G = Convolution(G, tmp, 2 * n - 1, 1);
  G.A.resize(n);
}
void Get_Derivative(polynomial F, polynomial &G) {
  int x = F.g_time();
  G.A.resize(x);
  for (int i(1); i <= x; ++i) G.A[i - 1] = F.A[i] * i % p;
}
void Get_Integral(polynomial F, polynomial &G) {
  int x = F.g_time();
  G.A.resize(x + 2);
  for (int i(0); i <= x; ++i) G.A[i + 1] = F.A[i] * inv[i + 1] % p;
  G.A[0] = 0;
}
void Get_Ln(polynomial F, polynomial &G, int n) {
  polynomial H, R;
  Get_Derivative(F, H);
  Get_Inv(F, R, n);
  H = Convolution(H, R, 2 * n - 1);
  H.A.resize(n);
  Get_Integral(H, G);
  G.A[n] = 0;
  G.A.resize(n);
}
void Get_Exp(polynomial F, polynomial &G, int n) {
  if (n == 1) {
    G.A.resize(1);
    G.A[0] = 1;
    return;
  }
  Get_Exp(F, G, (n + 1) / 2);
  polynomial H;
  Get_Ln(G, H, n);
  for (int i(0); i < n; ++i) H.A[i] = (F.A[i] - H.A[i] + (i == 0) + p) % p;
  G = Convolution(G, H, 2 * n - 1);
  G.A.resize(n);
}
void Get_Power(polynomial F, polynomial &G, long long K1, long long K2, int n,
               int fk) {
  long long S = 1, T = 0;
  while (F.A[T] == 0) ++T;
  if (fk && T) {
    G.A.resize(n);
    return;
  }
  for (int i(0); i <= F.g_time() - T; ++i) F.A[i] = F.A[i + T];
  F.A.resize(F.g_time() - T + 1);
  S = F.A[0];
  long long tmp = qp(S, p - 2);
  for (int i(0); i <= F.g_time(); ++i) F.A[i] = F.A[i] * tmp % p;
  polynomial H;
  Get_Ln(F, H, n);
  for (int i(0); i < n; ++i) H.A[i] = H.A[i] * K1 % p;
  Get_Exp(H, G, n);
  S = qp(S, K2);
  for (int i(0); i < n; ++i) G.A[i] = G.A[i] * S % p;
  T = T * K2;
  if (T >= n)
    G.A.clear(), G.A.resize(n);
  else {
    for (int i = n - 1; i >= T; --i) G.A[i] = G.A[i - T];
    for (int i(0); i < T; ++i) G.A[i] = 0;
  }
}
int n, A, B;
int main() {
  prepare();
  scanf("%d%d%d", &n, &A, &B);
  if (n == 1) {
    if (A == 1 && B == 1)
      return puts("1"), 0;
    else
      return puts("0"), 0;
  }
  polynomial F, G;
  F.A.resize(n);
  for (int i(0); i < n; ++i) F.A[i] = 1;
  Get_Ln(F, G, n);
  F.A.clear();
  Get_Power(G, F, A + B - 2, A + B - 2, n, 0);
  long long ANS = F.A[n - 1] * fac[n - 1] % p * invf[A + B - 2] % p;
  ANS = ANS * fac[A + B - 2] % p * invf[A - 1] % p * invf[B - 1] % p;
  cout << ANS << endl;
  return 0;
}
