/*

Code for problem C by cookiedoth
Generated 07 Jun 2020 at 04.29 PM


──────▄▌▐▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▌
───▄▄██▌█░ВЕЗЁМ▄▀▀▀▄░ГУСЕЙ░░░░░░░
───████▌█▄███▀░◐░▄▀▀▀▄░░РАБОТЯГИ░
──██░░█▌█░░▄███▀░◐░░▄▀▀▀▄░░░░░░░
─██░░░█▌█░░░░▐░▄▀▀▀▌░░░░◐░▀███▄░
▄██████▌█▄███▀░◐░░░▌░░░░░▐░░░░░░
███████▌█░░░░▌░░░░░▌░░░░░▐░░░░░░
███████▌█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▌
▀(@)▀▀▀▀▀▀▀(@)(@)▀▀▀▀▀▀▀▀▀▀▀▀▀(@)▀(@)

o_O
-_-
z_z

*/

#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <map>
#include <bitset>
#include <algorithm>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <functional>
#include <unordered_set>
#include <unordered_map>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <complex>
#include <cassert>
#include <random>
#include <cstring>
#include <numeric>
#define ll long long
#define ld long double
#define null NULL
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define debug(a) cerr << #a << " = " << a << endl
#define forn(i, n) for (int i = 0; i < n; ++i)
#define sz(a) (int)a.size()

using namespace std;

template<class T> int chkmax(T &a, T b) {
	if (b > a) {
		a = b;
		return 1;
	}
	return 0;
}

template<class T> int chkmin(T &a, T b) {
	if (b < a) {
		a = b;
		return 1;
	}
	return 0;
}

template<class iterator> void output(iterator begin, iterator end, ostream& out = cerr) {
	while (begin != end) {
		out << (*begin) << " ";
		begin++;
	}
	out << endl;
}

template<class T> void output(T x, ostream& out = cerr) {
	output(x.begin(), x.end(), out);
}

void fast_io() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
}

const int MOD = 1e9 + 7;

void add(int &a, int b) {
	a += b;
	if (a >= MOD) {
		a -= MOD;
	}
}

int mul(int a, int b) {
	return (1LL * a * b) % MOD;
}

const int mx = 5010;
int n, a, b, dp1[mx][2][2], dp2[mx][3][2];

void read() {
	cin >> n >> a >> b;
	if (a > b) {
		swap(a, b);
	}
}

void calc_dp1() {
	for (int d1 = 0; d1 < 2; ++d1) {
		for (int d2 = 0; d2 < 2; ++d2) {
			dp1[0][d1][d2] = (d1 != d2);
		}
	}
	for (int i = 1; i <= n; ++i) {
		for (int d1 = 0; d1 < 2; ++d1) {
			for (int d2 = 0; d2 < 2; ++d2) {
				int low_sz = (d1 == 0 ? a : 1);
				for (int j = low_sz; j <= i; ++j) {
					add(dp1[i][d1][d2], dp1[i - j][d1 ^ 1][d2]);
				}
			}
		}
	}

	// cerr << "dp1" << endl;
	// for (int i = 1; i <= n; ++i) {
	// 	for (int d1 = 0; d1 < 2; ++d1) {
	// 		for (int d2 = 0; d2 < 2; ++d2) {
	// 			cerr << i << " " << d1 << " " << d2 << " " << dp1[i][d1][d2] << endl;
	// 		}
	// 	}
	// }
}

void calc_dp2() {
	for (int it = 0; it < 3; ++it) {
		dp2[0][it][0] = 1;
	}
	for (int i = 1; i <= n; ++i) {
		for (int d1 = 0; d1 < 3; ++d1) {
			for (int need = 0; need < 2; ++need) {
				if (d1 == 2) {
					for (int j = 1; j < min(i + 1, a); ++j) {
						add(dp2[i][d1][need], dp2[i - j][1][need]);
					}
				} else {
					for (int j = 1; j <= i; ++j) {
						int new_need = (j >= b ? 0 : need);
						int val = dp1[j][d1][1];
						if (i == j) {
							add(val, dp1[j][d1][0]);
						}
						add(dp2[i][d1][need], mul(dp2[i - j][2][new_need], val));
					}
				}
			}
		}
	}
}

void print_ans() {
	int ans = 0;
	for (int it = 0; it < 3; ++it) {
		add(ans, dp2[n][it][1]);
	}
	cout << ans << '\n';
}

signed main() {
	fast_io();
	read();
	calc_dp1();
	calc_dp2();
	print_ans();
}


Measured memory_bytes: 3852