#include<bits/stdc++.h>
using namespace std;
#define int long long
// #define int __int128
template <typename T>
inline void read(T &a) {
char c;for (c = getchar(); (c < '0' || c > '9') && c != '-'; c = getchar());bool f = c == '-';T x = f ? 0 : (c ^ '0');for (c = getchar(); c >= '0' && c <= '9'; c = getchar()) {x = x * 10 + (c ^ '0');}a = f ? -x : x;
}
template <typename T, typename ...Argv>
inline void read(T &a, Argv &...argv) {
read(a), read(argv...);
}
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
inline int Ari(int l, int r, int d) {
return (l + r) * ((r - l) / d + 1) / 2;
}
int l = 1, r, a, b, ab;
int ans;
signed main() {
read(r, a, b);
// if (a > b) swap(a, b);
// if (b % a == 0) {
// int La = ceil((long double)l / a);
// int Ra = (long double)r / a;
// ans = Ari(1, r, 1);
// if (La <= Ra) ans -= Ari(La * a, Ra * a, a);
// } else {
// ab = a * b;
// int La = ceil((long double)l / a);
// int Ra = (long double)r / a;
// int Lb = ceil((long double)l / b);
// int Rb = (long double)r / b;
// int Lab = ceil((long double)l / ab);
// int Rab = (long double)r / ab;
// ans = Ari(1, r, 1);
// // if (La <= Ra) ans -= Ra - La + 1;
// // if (Lb <= Rb) ans -= Rb - Lb + 1;
// // if (Lab <= Rab) ans += Rab - Lab + 1;
// if (La <= Ra) ans -= Ari(La * a, Ra * a, a);
// if (Lb <= Rb) ans -= Ari(Lb * b, Rb * b, b);
// if (Lab <= Rab) ans += Ari(Lab * ab, Rab * ab, ab);
// }
ab = lcm(a, b);
int La = ceil((long double)l / a);
int Ra = (long double)r / a;
int Lb = ceil((long double)l / b);
int Rb = (long double)r / b;
int Lab = ceil((long double)l / ab);
int Rab = (long double)r / ab;
ans = Ari(1, r, 1);
// if (La <= Ra) ans -= Ra - La + 1;
// if (Lb <= Rb) ans -= Rb - Lb + 1;
// if (Lab <= Rab) ans += Rab - Lab + 1;
if (La <= Ra) ans -= Ari(La * a, Ra * a, a);
if (Lb <= Rb) ans -= Ari(Lb * b, Rb * b, b);
if (Lab <= Rab) ans += Ari(Lab * ab, Rab * ab, ab);
printf("%lld\n", ans);
}