When you don't have to, don't do it! It will become very painful, especially if the languages cross boundaries like you suggested (read Clean Architecture about the boundaries).
If you really want to do it, there are are so called interop layers in each software (NDK for Java for example). But you always have to care about the representation of variables and concepts in memory and the underlying platform.
The worst here: You have three completely different kind of programming languages: C is compiled and very (very) near at the hardware, Java is a mix between compiled and interpreted and is a little bit more away from the platform (it is leaking through here and there) and finally you have an interpreted language with python which hides the hardware.
Your argument for doing it sounds for me like premature optimisation: You should only improve performance when you measure a problem with performance in your current application. In my opinion Java is really fast through the JIT (See Kafka for example - it is incredible).
Note: When you really want to use different languages make sure they are all on the JVM like Java with Groovy and Jython for example.
[EDIT]: Was mentioned in the comments: There are use-cases where different languages makes sense. The best example is a web-application, where you have HTML, Java-Code and SQL-Code in one project (even with three different paradigms: Just Markup, Imperative, Declarative). But you have VERY clear boundaries (HTML has an different file-extension).
Even in this clear scenario, it is hard to not mix the languages an cross boundaries. You should for example push all SQL-Code awai from your business-logic and keep the HTML separate. In short: Try to avoid it, but when you have to do it, be aware of your boundaries.