/*
题目链接:http://codeforces.com/contest/450/problem/C
题目意思:给出一个 n * m 大小的chocolate bar,你需要在这个bar上切 k 刀,使得最小的部分面积尽可能大,
求出这个被划分后的最小部分面积最大可以为多少。如果这个chocolate bar 不能切成 k 部分,则输出-1。
注意,每一刀需要符合3个条件:1、打横切或者打竖切; 2、每一刀只能经过unit square(即1*1的单元bar)的边,
也就是说不能把一个单元bar损坏,要完整;
3、每一刀只能在整个chocolate bar的里面操作,
也就是说,外围的四条边是不允许切的。
还有一个条件就是,每一刀都是不相同的。
if (n-1 >= k || m-1 >= k) 全部都横切或者竖切
else 先把横(或竖)全切了 把剩下的倒数拿去切竖(横)的
因为要求最小块 所以直接 除就行了
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <cmath>
#include <stack>
#include <string>
#include <sstream>
#include <map>
#include <set>
#define pi acos(-1.0)
#define LL long long
#define ULL unsigned long long
#define inf 0x3f3f3f3f
#define INF 1e18
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
typedef pair<int, int> P;
const double eps = 1e-10;
const int maxn = 1e6 + 5;
const int N = 1e4 + 5;
const int mod = 1e8;
int main(void)
{
// freopen("in.txt","r", stdin);
LL n, m, k;
// 假定n为竖的 m为横的
while (cin >> n >> m >> k)
{
if (n + m - 2 < k){
cout << "-1" << endl;
continue;
}
LL ans = 0;
if (n-1 >= k) // 横切k次 因为切了k次有会有k+1份 所以n/(k+1)
ans = max(ans, m * (n/(k+1)));
if (m-1 >= k) // 竖切k次
ans = max(ans, n * (m/(k+1)));
if (n-1 < k) // 横切n-1次 竖切k-(n-1)次
ans = max(ans, m / (k-(n-1)+1));
if (m-1 < k) // 竖切m-1次 横切k-(m-1)次
ans = max(ans, n / (k-(m-1)+1));
cout << ans << endl;
}
return 0;
}