Sounds like a case for muldiv (a, b, c) - anyone who's au-fait with AVR assembler
could probably knock one up...
Failing that map can be used, something like this (untested).
// return a*b/c using enough precision in intermediate results
int muldiv (int a, int b, int c)
{
return map (a, 0, c, 0, b) ;
}