/*
 * Copyright (c) 2006 Kamo Hiroyasu
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * An answer to
 *  Problem A Dirichlet's Theorem on Arithmetic Progressions
 *  Author: Kamo Hiroyasu <wd@ics.nara-wu.ac.jp>
 */

#include <bitset>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <unistd.h>

using namespace std;

class prime_checker {
private:
	static const unsigned int	size = 1000000;
	bitset<size>	*bitmap;
public:
	prime_checker();
	~prime_checker();
	bool	operator()(int n) { return !(*bitmap)[n]; }
};

prime_checker::prime_checker()
{
	bitset<size>	*bitmap = new bitset<size>;
	(*bitmap)[0] = (*bitmap)[1] = true;
	for (unsigned int i = 4; i < size; i += 2) {
		(*bitmap)[i] = true;
	}
	for (unsigned int i = 9; i < size; i += 6) {
		(*bitmap)[i] = true;
	}
	for (unsigned int i = 5, di = 2; i * i < size; i += di, di = 6 - di) {
		if ((*bitmap)[i]) continue;
		for (unsigned int
			     j = i * i, i6 = i * 6, dj = i * ((9 - i % 6) / 2);
		     j < size; j += dj, dj = i6 - dj) {
			(*bitmap)[j] = true;
		}
	}
	this->bitmap = bitmap;
}

prime_checker::~prime_checker()
{
	delete bitmap;
}

prime_checker	isprime;

class aseq {
private:
	int	a0, d;
public:
	int	nth_prime(unsigned int);
	aseq(int, int);
};

inline
aseq::aseq(int a0, int d)
{
	this->a0 = a0;
	this->d = d;
}

int
aseq::nth_prime(unsigned int n)
{
	int	a = a0;
	for (unsigned int i = 0;;) {
		if (isprime(a)) {
			i ++;
			if (i == n) break;
		}
		a += d;
	}
	return a;
}

void
main_loop(istream &in)
{
	int		a0, d;
	unsigned int	n;
	while (in >> a0 >> d >> n && n != 0) {
		aseq	s(a0, d);
		cout << s.nth_prime(n) << endl;
	}
}

void
main_loop(const char *path)
{
	ifstream	in(path);
	main_loop(in);
}

int
main(int argc, char *argv[])
{
	argc --;
	argv ++;
	switch (argc) {
	case 0:
		main_loop(cin);
		break;
	case 1:
		main_loop(argv[0]);
		break;
	}
	return 0;
}
