#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>; using vi = vector<int>; using vp = vector<pii>; using ll = long long;
using ull = unsigned long long; using db = double; using ld = long double; using lll = __int128_t;
template<typename T1, typename T2> T1 max(T1 a, T2 b) { return a > b ? a : b; }
template<typename T1, typename T2> T1 min(T1 a, T2 b) { return a < b ? a : b; }
#define multi int T; cin >> T; while ( T -- )
#define timer cerr << 1. * clock() / CLOCKS_PER_SEC << '\n';
#define iot ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define rep(i,s,t) for (register int i = (s), i##_ = (t) + 1; i < i##_; ++ i)
#define pre(i,s,t) for (register int i = (s), i##_ = (t) - 1; i > i##_; -- i)
#define eb emplace_back
#define pb pop_back
const int N = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fll;
// int mod;
// const int mod = 10007;
// const int mod = 469762049, g = 3;
const int mod = 998244353; // const int g = 3;
// const int mod = 1004535809, g = 3;
// const int mod = 1e9 + 7;
// const int mod = 1e9 + 9;
// const int mod = 1e9 + 3579, bse = 131;
/* add / sub */ template<typename T1,typename T2>inline T1 add(T1 a,T2 b){return(a+=b)>=mod?a-mod:a;}template<typename T1,typename...Args>inline T1 add(T1 a,Args...b){return add(a,add(b...));}template<typename T1,typename T2>inline T1 sub(T1 a,T2 b){return(a-=b)<0?a+mod:a;}template<typename T1,typename...Args>inline T1 sub(T1 a,Args...b){return sub(a,add(b...));}template<typename T1,typename T2>inline void addi(T1&a,T2 b){(a+=b)>=mod?(a-=mod):true;}template<typename T1,typename...Args>inline void addi(T1&a,Args...b){addi(a,add(b...));}template<typename T1,typename T2>inline void subi(T1&a,T2 b){(a-=b)<0?(a+=mod):true;}template<typename T1,typename...Args>inline void subi(T1&a,Args...b){subi(a,add(b...));}
/* Fastmod / mul */ struct FastMod{int m;ll b;inline void init(int _m=1){m=_m;if(m==0)m=1;b=((lll)1<<64)/m;}FastMod(int _m=1){init(_m);}inline int operator()(ll a){ll q=((lll)a*b)>>64;a-=q*m;if(a>=m)a-=m;return a;}}Mod(mod);inline int mul(int a,int b){return Mod(1ll*a*b);}template<typename T1,typename T2>inline int mul(T1 a,T2 b){return Mod((long long)(1ll*a*b));}template<typename T,typename...Args>inline int mul(T a,Args...b){return mul(a,mul(b...));}template<typename T1,typename T2>inline void muli(T1&a,T2 b){a=Mod(1ll*a*b);}template<typename T1,typename...Args>inline void muli(T1&a,Args...b){muli(a,mul(b...));} // /* trivial multiple function(idk whether its useful*/ inline int mul(int a, int b) { return 1ll * a * b % mod; } template <typename T1, typename T2> inline int mul(T1 a, T2 b) { return (long long)(1ll * a * b) % mod; } template <typename T, typename ...Args> inline int mul(T a, Args ...b) { return mul(a, mul(b...)); }
/* qp fac C */ template<typename T1,typename T2>inline T1 qp(T1 a,T2 b){T1 ret=1;for(;b>0;a=1ll*a*a%mod,b>>=1)if(b&1)ret=mul(ret,a);return ret;}vi __fac({1,1}),__ifc({1,1}),__inv({0,1});inline void ___prep(int n){static int i=2;if(i<n)for(__fac.resize(n),__ifc.resize(n),__inv.resize(n);i<n;i++)__fac[i]=mul(i,__fac[i-1]),__inv[i]=mul((mod-mod/i),__inv[mod%i]),__ifc[i]=mul(__inv[i],__ifc[i-1]);}inline int fac(int x){return ___prep(x+1),__fac[x];}inline int ifc(int x){return ___prep(x+1),__ifc[x];}inline int inv(int x){return ___prep(x+1),__inv[x];}inline int C(int n,int m){if(n<m or n<0 or m<0)return 0;return mul(fac(n),ifc(m),ifc(n-m));} struct Light{int base,expv,sqrv;FastMod _Mod;vector<int>upv,dnv;inline void init(int bse=1,int exp=0,int Mod=mod){base=bse,expv=exp,_Mod.init(Mod);sqrv=__builtin_sqrtf(expv)+2;upv.resize(sqrv+1),dnv.resize(sqrv+1);dnv[0]=upv[0]=1;for(int i=1;i<=sqrv;++i)dnv[i]=_Mod(1ll*dnv[i-1]*base);upv[1]=dnv[sqrv];for(int i=2;i<=sqrv;++i)upv[i]=_Mod(1ll*upv[i-1]*upv[1]);}Light(int bse=1,int exp=0,int Mod=mod){init(bse,exp,Mod);}inline int operator()(const int&nexp){return _Mod(1ll*dnv[nexp%sqrv]*upv[nexp/sqrv]);}};
int n, a, b;
inline int t(int k) {
if (k == a + b) return b == 0;
return sub(C(a + b - k - 1, a - k), C(a + b - k - 1, a - k - 1));
}
signed main() {
cin >> n >> a >> b;
int j, ret = 0, ti;
rep(i,0,a) {
addi(ret, mul( C(n - a - b + 2 * i, i), t(i) ));
subi(ret, mul( C(n - a - b + 1 + 2 * i, i), t(i + 1) ));
}
cout << ret << '\n';
}